﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using LojaVirtual.Comuns.Clientes;
using LojaVirtual.Comuns.Produtos;

namespace LojaWeb.Models
{
	public class CarrinhoLoja : Compra
	{
		public double TotalFrete
		{
			get
			{
				return Total > 0 ? Total + Frete : 0;
			}
		}

		public static CarrinhoLoja GetCarrinho(HttpContextBase context)
		{
			var cliente = (Cliente)context.Session["Cliente"];
			CarrinhoLoja carro = new CarrinhoLoja();

			string sessionID = string.Empty;

			if (cliente != null)
			{
				sessionID = cliente.Email;
			}

			if (context.Session[sessionID] == null)
			{
				if (!string.IsNullOrWhiteSpace(sessionID))
				{
					context.Session[sessionID] = new CarrinhoLoja();
					carro = (CarrinhoLoja)context.Session[sessionID];
				}
			}
			else
			{
				carro = (CarrinhoLoja)context.Session[sessionID];
			}

			carro.Cliente = cliente;
			carro.Frete = CalculadorDeFrete.Calcula(carro);
			return carro;
		}

		public void AdicionaAoCarrinho(Produto produto)
		{
			var itemCarrinho = Itens.SingleOrDefault(c => c.Produto.ID == produto.ID);

			if (itemCarrinho == null)
			{
				itemCarrinho = new ItemCompra
				{
					Produto = produto,
					Quantidade = 1
				};

				this.Itens.Add(itemCarrinho);
			}
			else
			{
				itemCarrinho.Quantidade++;
			}
		}

		public void RemoveDoCarrinho(int id)
		{
			var itemCarrinho = Itens.SingleOrDefault(c => c.Produto.ID == id);

			if (itemCarrinho != null)
			{
				if (itemCarrinho.Quantidade > 1)
					itemCarrinho.Quantidade--;
				else
					Itens.Remove(itemCarrinho);
			}
		}




		internal void Esvaziar()
		{
			Itens = new List<ItemCompra>();
		}
	}
}